/**
 * @author PLO Pascal
 */
package edu.com.gestionstock.dao.bo;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;



import edu.com.gestionstock.bean.Dvd;
import edu.com.gestionstock.dao.DAO;

public class DvdDAO extends DAO<Dvd>
{

    @Override
    public Dvd find(int id)
    {
        Dvd dvd = new Dvd();
        try
        {
            ResultSet result = this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(
                    "SELECT * FROM produitsDvd WHERE id = " + id);

            if ( result.first() )
            {
                dvd.setId(id);
                dvd.setQuantiteLoue(result.getInt("quantiteLoue"));
                dvd.setQuantiteStock(result.getInt("quantiteStock"));
                dvd.setRealisateur(result.getString("realisateur"));
                dvd.setTitre(result.getString("titre"));
            }
            System.out.println(dvd.toString());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return dvd;

    }

    @Override
    public Dvd create(Dvd obj)
    {
        try
        {
            PreparedStatement prepare = this.connect
                    .prepareStatement(
                    "INSERT INTO produitsDVD (quantiteloue, quantiteStock, realisateur, titre) "
                    + "VALUES( "
                    + obj.getQuantiteLoue() + ","
                    + obj.getQuantiteStock() + ",'"
                    + obj.getRealisateur() + "','"
                    + obj.getTitre() + "');");
            prepare.executeUpdate();

            ResultSet result = this.connect
                    .createStatement()
                    .executeQuery("SELECT max(id) as id FROM produitsDvd;");
            result.first();
            obj.setId(result.getInt("id"));
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return obj;
    }

    @Override
    public Dvd update(Dvd obj)
    {
        try
        {
            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "UPDATE produitsDVD SET quantiteloue = " + obj.getQuantiteLoue() + ", "
                    + "realisateur = '" + obj.getRealisateur() + "', "
                    + "titre = '" + obj.getTitre() + "', "
                    + "quantiteStock = " + obj.getQuantiteStock()
                    + " WHERE id = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return obj;
    }

    @Override
    public void delete(Dvd obj)
    {
        try
        {

            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "DELETE FROM produitsDVD WHERE id = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    public ArrayList<Dvd> findList(Dvd obj)
    {
        ArrayList<Dvd> arrDvd = new ArrayList<>();

        try
        {
            PreparedStatement prepare;

            //long startTime = System.currentTimeMillis();
            String query = "";
            if ( (!obj.getRealisateur().equals("")) && (!obj.getTitre().equals("")) )
            {
                query = "select * from  produitsdvd  where Titre like ?  and realisateur like ?;";
            }
            if ( (!obj.getRealisateur().equals("")) && (obj.getTitre().equals("")) )
            {
                query = "select * from  produitsdvd  where realisateur like ?;";
            }
            if ( (obj.getRealisateur().equals("")) && (!obj.getTitre().equals("")) )
            {
                query = "select * from  produitsdvd  where Titre like ?;";
            }

            if ( query != "" )
            {
                prepare = this.connect.prepareStatement(query);

                if ( (!obj.getRealisateur().equals("")) && (!obj.getTitre().equals("")) )
                {
                    prepare.setString(1, "%" + obj.getTitre() + "%");
                    prepare.setString(2, "%" + obj.getRealisateur() + "%");
                }
                if ( (!obj.getRealisateur().equals("")) && (obj.getTitre().equals("")) )
                {
                    prepare.setString(2, "%" + obj.getRealisateur() + "%");
                }
                if ( (obj.getRealisateur().equals("")) && (!obj.getTitre().equals("")) )
                {
                    prepare.setString(1, "%" + obj.getTitre() + "%");
                }

                ResultSet result = prepare.executeQuery();

                // System.out.println(prepare);						
                while ( result.next() )
                {
                    Dvd dvd = new Dvd();
                    dvd.setId(result.getInt("ID"));
                    dvd.setTitre(result.getString("TITRE"));
                    dvd.setRealisateur(result.getString("REALISATEUR"));
                    dvd.setQuantiteLoue(result.getInt("QUANTITELOUE"));
                    dvd.setQuantiteStock(result.getInt("QUANTITESTOCK"));
                    arrDvd.add(dvd);
                    System.out.println(dvd);
                }
            }
            // long endTime = System.currentTimeMillis();
            // long elapsedTime = (endTime - startTime);
            // System.out.println("Total time required to execute is " + elapsedTime+" milliseconds.");

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrDvd;
    }

    @Override
    public ArrayList<Dvd> findList(String value)
    {
        ArrayList<Dvd> arrDvd = new ArrayList<>();

        try
        {
            //long startTime = System.currentTimeMillis();
            String query = "";
            query = "select * from  produitsdvd  where Titre like ?  or realisateur like ?;";

            PreparedStatement prepare = this.connect
                    .prepareStatement(query);
            prepare.setString(1, "%" + value + "%");
            prepare.setString(2, "%" + value + "%");
            ResultSet result = prepare.executeQuery();

            while ( result.next() )
            {
                Dvd dvd = new Dvd();
                dvd.setId(result.getInt("ID"));
                dvd.setTitre(result.getString("TITRE"));
                dvd.setRealisateur(result.getString("REALISATEUR"));
                dvd.setQuantiteLoue(result.getInt("QUANTITELOUE"));
                dvd.setQuantiteStock(result.getInt("QUANTITESTOCK"));
                arrDvd.add(dvd);
                System.out.println(dvd);
            }

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrDvd;
    }

    public void reset() throws SQLException
    {;
        this.connect
                .createStatement().execute("truncate produitsDVD;");
    }
}
